home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / eulisp / you-075a.lha / you-075a / modules.h < prev    next >
C/C++ Source or Header  |  1992-06-18  |  2KB  |  53 lines

  1.  
  2. extern void process_import_spec(LispObject*,LispObject,LispObject);
  3.  
  4.  
  5. extern LispObject symbol_ref(LispObject*,LispObject,LispObject,LispObject);
  6.  
  7. EUDECL(module_eval);
  8. EUDECL(process_top_level_form);
  9. EUDECL(old_module_eval);
  10. EUDECL(module_mv_apply_1);
  11.  
  12. extern LispObject module_set(LispObject*);
  13. extern LispObject module_set_new(LispObject*,LispObject,LispObject,LispObject);
  14. extern LispObject module_set_new_constant(LispObject*,
  15.                       LispObject,LispObject,LispObject);
  16.  
  17. extern LispObject put_module(LispObject*,LispObject,LispObject);
  18. extern LispObject get_module(LispObject*,LispObject);
  19. extern int module_loaded_p(LispObject*,LispObject);
  20. extern int module_binding_exists_p(LispObject*,LispObject,LispObject);
  21.  
  22. extern LispObject register_module_import(LispObject*);
  23. extern LispObject process_exports(LispObject*);
  24.  
  25. extern LispObject global_module_table;
  26. extern SYSTEM_GLOBAL(LispObject,current_interactive_module);
  27.  
  28.  
  29. /******* Really just for calls.c (macroexpansion) and modops *****/
  30. #define BINDING_HOME(x) (CAR(CDR(x)))
  31. #define BINDING_MUTABLE(x) (CAR(CDR(CDR(x))))
  32. #define BINDING_VALUE(x) (CAR(x))
  33.  
  34. /* All except into+mutable must be safe */
  35. #define MAKE_BINDING(into,mod,value,mutable) \
  36.   into=EUCALL_2(Fn_cons,mutable,nil);         \
  37.   into=EUCALL_2(Fn_cons,mod,into);         \
  38.   into=EUCALL_2(Fn_cons,value,into);         
  39.  
  40. #define GET_BINDING(mod, sym)    EUCALL_2(Fn_tref,mod->MODULE.bindings,sym)
  41. #define ADD_BINDING(mod, sym, value, mutable) \
  42. {                        \
  43.   LispObject xx;            \
  44.   STACK_TMP(sym);            \
  45.   MAKE_BINDING(xx,(LispObject)mod,value,mutable);        \
  46.   UNSTACK_TMP(sym);            \
  47.   EUCALL_3(tref_updator,        \
  48.            BINDING_HOME(xx)->MODULE.bindings,sym,xx);    \
  49. }
  50.  
  51. #define IMPORT_BINDING(mod,name,bind)        \
  52.   EUCALL_3(tref_updator,mod->MODULE.bindings,name,bind);
  53.